def trapezoidal_integral(y_values, dt):
    """
    Calcula a integral de uma função discreta usando a regra trapezoidal composta.

    Parâmetros:
    -----------
    y_values : array-like
        Valores do integrando (função f(t)) nos pontos discretos.
    dt : float
        Passo de tempo entre os pontos.

    Retorna:
    --------
    integral : float
        Valor aproximado da integral ∫ f(t) dt.
    """
    y_values = np.asarray(y_values)
    integral = dt * (0.5 * y_values[0] + np.sum(y_values[1:-1]) + 0.5 * y_values[-1])
    return integral


# Exemplo de uso da função trapezoidal_integral
#int_trab_res[i] = dt * ( 0.5*(fun[0] + fun[i]) + np.sum(fun[1:i]) )
#int_trab_res[i] = trapezoidal_integral(fun[:i+1], dt)

# Exemplo: integrar f(t) = t^2 de t = 0 até t = 1
t = np.linspace(0, 1, 101)
f = t**2
dt = t[1] - t[0]
area = trapezoidal_integral(f, dt)
print("Integral aproximada de t^2 de 0 a 1:", area)  # Valor real é 1/3 ≈ 0.3333
